#!/bin/bash
# vim: fdm=marker fmr=[[[,]]] cms=\ #%s

cnfg_get_property()
{ #[[[
    local cnfg=$1
    local section=$2
    local property=$3

    awk '
BEGIN { in_section=0; }
{
    gsub("#[^\"]*", "");
    if($0 ~ /^ *\[.*\] *$/)
    {
        if(in_section) { exit; }
        gsub("^ *\\[", "");
        gsub("\\] *$", "");
        if($0 == "'$section'") { in_section=1; }
        next;
    }
    if(in_section)
    {
        if($0 ~ /^ *'$property' *=/)
        {
            gsub("^ *'$property' *=", "");
            gsub("^ *", "");
            gsub("^\"", "");
            gsub(" *$", "");
            gsub("\"$", "");
            print;
            exit;
        }
    }
}
' $cnfg
} #]]]

cnfg_get_subproperty()
{ #[[[
    local cnfg=$1
    local section=$2
    local property=$3
    local subproperty=$4

    local values=$(cnfg_get_property "$cnfg" "$section" "$property")
    [[ -z $values ]] && return 1
    values=${values#(}
    values=${values%)}
    echo $values | awk '
BEGIN { FS=";" }
{
    for(i=1; i<=NF; ++i)
    {
        if($i ~ /^ *'$subproperty' *=/)
        {
            gsub("^ *'$subproperty' *=", "", $i);
            gsub("^ *", "", $i);
            gsub("^\"", "", $i);
            gsub(" *$", "", $i);
            gsub("\"$", "", $i);
            print $i;
            exit;
        }
    }
}
'
} #]]]

cnfg_property_array()
{ #[[[
    local cnfg=$1
    local section=$2

    awk '
BEGIN { in_section=0; }
{
    gsub("#[^\"]*", "");
    if($0 ~ /^ *\[.*\] *$/)
    {
        if(in_section) { exit; }
        gsub("^ *\\[", "");
        gsub("\\] *$", "");
        if($0 == "'$section'") { in_section=1; }
        next;
    }
    if(in_section)
    {
        split($0, arr, "=");
        gsub("^ *", "", arr[1]);
        gsub(" *$", "", arr[1]);
        print arr[1];
    }
}
' $cnfg
} #]]]
